AWS CLIでサービスの各種コマンドを動かしてみる(EC2編1: インスタンス)
IAM編の次はEC2編です。IAM編についてはまだ制覇して無いですがその辺は緩やかに色々なサービスをつまみ食いしながらと言う事で。
- AWS Command Line Interface
- aws/aws-cli
- Amazon EC2 (仮想サーバー Amazon Elastic Compute Cloud) | アマゾン ウェブ サービス(AWS 日本語)
EC2(Elastic Compute Cloud)
awscliでec2のコマンドを見てみましょう。唯一、1サービスで『全部の候補を表示しますか?』と聞かれます。それもそのはず、利用可能な機能は何と149個!数の多さに思わず怯んでしまいますが(笑)、要素別に整理して少しずつ試してみようと思います。
$ aws ec2 Display all 149 possibilities? (y or n) activate-license delete-network-acl-entry describe-volume-status allocate-address delete-network-interface describe-volumes assign-private-ip-addresses delete-placement-group describe-vpc-attribute associate-address delete-route describe-vpcs associate-dhcp-options delete-route-table describe-vpn-connections associate-route-table delete-security-group describe-vpn-gateways attach-internet-gateway delete-snapshot detach-internet-gateway attach-network-interface delete-spot-datafeed-subscription detach-network-interface attach-volume delete-subnet detach-volume attach-vpn-gateway delete-tags detach-vpn-gateway authorize-security-group-egress delete-volume disable-vgw-route-propagation authorize-security-group-ingress delete-vpc disassociate-address bundle-instance delete-vpn-connection disassociate-route-table cancel-bundle-task delete-vpn-connection-route enable-vgw-route-propagation cancel-conversion-task delete-vpn-gateway enable-volume-io cancel-export-task deregister-image get-console-output cancel-reserved-instances-listing describe-account-attributes get-password-data cancel-spot-instance-requests describe-addresses import-instance confirm-product-instance describe-availability-zones import-key-pair copy-image describe-bundle-tasks import-volume copy-snapshot describe-conversion-tasks modify-image-attribute create-customer-gateway describe-customer-gateways modify-instance-attribute create-dhcp-options describe-dhcp-options modify-network-interface-attribute create-image describe-export-tasks modify-snapshot-attribute create-instance-export-task describe-image-attribute modify-volume-attribute create-internet-gateway describe-images modify-vpc-attribute create-key-pair describe-instance-attribute monitor-instances create-network-acl describe-instance-status purchase-reserved-instances-offering create-network-acl-entry describe-instances reboot-instances create-network-interface describe-internet-gateways register-image create-placement-group describe-key-pairs release-address create-reserved-instances-listing describe-licenses replace-network-acl-association create-route describe-network-acls replace-network-acl-entry create-route-table describe-network-interface-attribute replace-route create-security-group describe-network-interfaces replace-route-table-association create-snapshot describe-placement-groups report-instance-status create-spot-datafeed-subscription describe-regions request-spot-instances create-subnet describe-reserved-instances reset-image-attribute create-tags describe-reserved-instances-listings reset-instance-attribute create-volume describe-reserved-instances-offerings reset-network-interface-attribute create-vpc describe-route-tables reset-snapshot-attribute create-vpn-connection describe-security-groups revoke-security-group-egress create-vpn-connection-route describe-snapshot-attribute revoke-security-group-ingress create-vpn-gateway describe-snapshots run-instances deactivate-license describe-spot-datafeed-subscription start-instances delete-customer-gateway describe-spot-instance-requests stop-instances delete-dhcp-options describe-spot-price-history terminate-instances delete-internet-gateway describe-subnets unassign-private-ip-addresses delete-key-pair describe-tags unmonitor-instances delete-network-acl describe-volume-attribute $
このエントリで試すのは、中心的サービスEC2の更に核となる要素、『インスタンス』に関するもの。インスタンスに関するものは以下の15個。
run-instances describe-instances start-instances stop-instances reboot-instances terminate-instances monitor-instances unmonitor-instances bundle-instance import-instance describe-instance-status report-instance-status describe-instance-attribute modify-instance-attribute reset-instance-attribute
EC2:インスタンス(instance)に関する操作
run-instances
EC2インスタンスを作成、起動します。作成及び起動の際には、イメージID(image-id)が必要です。でもその情報ってどこから?
EC2を使い始めの頃とか、ハンズオンとかでは割とClassic Wizardから選ぶ事が多いと思いますが、ここで選択した時点で所定のAMIであり、AMIに紐付くimage-idを指定している事になる訳ですね。
『Quick Launch Wizard』を使うと、もっと手軽に利用したい環境のAMIを調べる事が出来ます。『More Amazon Machine Images AMI』を選択し、次へ。
次の画面にて、種類やフリーワード等で使いたいAMIのimage-idを知る事が出来ます。ひとまずここでは、『Amazon Linux AMI 2013.03.1』のimage-idを使う事にしましょう。
コマンド実践例。image-idと作成・起動時の起動数の設定については必須となっているようです。
$ aws ec2 run-instances --image-id ami-39b23d38 --min-count 1 --max-count 1 { "OwnerId": "XXXXXXXXXXXX", "ReservationId": "r-f4fc3ff6", "ResponseMetadata": { "RequestId": "9a8782d8-7fe0-4891-b344-0cb1d8efb765" }, "Groups": [ { "GroupName": "default", "GroupId": "sg-ad2556ac" } ], "Instances": [ { "Monitoring": { "State": "disabled" }, "PublicDnsName": null, "KernelId": "aki-44992845", "State": { "Code": 0, "Name": "pending" }, "EbsOptimized": false, "LaunchTime": "2013-07-12T17:20:16.000Z", "ProductCodes": [], "StateTransitionReason": null, "InstanceId": "i-8490db86", "ImageId": "ami-39b23d38", "PrivateDnsName": null, "SecurityGroups": [ { "GroupName": "default", "GroupId": "sg-ad2556ac" } ], "ClientToken": null, "InstanceType": "m1.small", "NetworkInterfaces": [], "Placement": { "Tenancy": "default", "GroupName": null, "AvailabilityZone": "ap-northeast-1a" }, "Hypervisor": "xen", "BlockDeviceMappings": [], "Architecture": "x86_64", "StateReason": { "Message": "pending", "Code": "pending" }, "RootDeviceName": "/dev/sda1", "VirtualizationType": "paravirtual", "RootDeviceType": "ebs", "AmiLaunchIndex": 0 } ] }
上記では最低限の引数で作成・起動しましたが、ヘルプを見ると非常に細やかな設定での実行が可能となっています。
SYNOPSIS aws ec2 run-instances --image-id <value> --min-count <value> --max-count <value> [--key-name <value>] [--security-groups <value>] [--security-group-ids <value>] [--user-data <value>] [--instance-type <value>] [--placement <value>] [--kernel-id <value>] [--ramdisk-id <value>] [--block-device-mappings <value>] [--monitoring <value>] [--subnet-id <value>] [--disable-api-termination ] [--instance-initiated-shutdown-behavior <value>] [--license <value>] [--private-ip-address <value>] [--client-token <value>] [--additional-info <value>] [--network-interfaces <value>] [--iam-instance-profile <value>] [--ebs-optimized ]
作成・起動したEC2インスタンスの内容を見てみると、"Name"欄がEmptyの状態になっています。ここは分り易く何か設定したいですね。いずれ改めて後述しますが、『create-tags』コマンドでTag情報を追加する事が出来ます。
$ aws ec2 create-tags --resources i-8490db86 --tags '[{"key": "Name", "value": "EC2-AWSCLI-TEST"}]' { "return": "true", "ResponseMetadata": { "RequestId": "96392cd4-3179-4cb4-9c9a-9da930445a8b" } }
コマンド実行後再確認。ちゃんと変更されました。
describe-instances
アカウントに紐付くEC2インスタンスの一覧を取得します。またインスタンスIDを指定した場合、所定のインスタンス情報を取得します。
$ aws ec2 describe-instances | jq '.Reservations[].Instances[].Tags[].Value' "AWS-Study-EC2" "ec2-test" "ec2-creation-test" "EC2-AWSCLI-TEST" $ aws ec2 describe-instances --instance-ids i-8490db86 | jq '.' { "ResponseMetadata": { "RequestId": "6ddf59a4-9282-42e2-bda8-4009b8d9f87c" }, "Reservations": [ { "Instances": [ { "AmiLaunchIndex": 0, "Tags": [ { "Key": "Name", "Value": "EC2-AWSCLI-TEST" } ], "VirtualizationType": "paravirtual", "RootDeviceName": "/dev/sda1", "KernelId": "aki-44992845", "Architecture": "x86_64", "BlockDeviceMappings": [ { "Ebs": { "AttachTime": "2013-07-12T17:20:20.000Z", "VolumeId": "vol-5e3feb7b", "DeleteOnTermination": true, "Status": "attached" }, "DeviceName": "/dev/sda1" } ], "Hypervisor": "xen", "Placement": { "AvailabilityZone": "ap-northeast-1a", "GroupName": null, "Tenancy": "default" }, "NetworkInterfaces": [], "PrivateIpAddress": "10.152.134.243", "PublicIpAddress": "54.250.99.46", "LaunchTime": "2013-07-12T17:20:16.000Z", "EbsOptimized": false, "State": { "Name": "running", "Code": 16 }, "RootDeviceType": "ebs", "PublicDnsName": "ec2-54-250-99-46.ap-northeast-1.compute.amazonaws.com", "Monitoring": { "State": "disabled" }, "ProductCodes": [], "StateTransitionReason": null, "InstanceId": "i-8490db86", "ImageId": "ami-39b23d38", "PrivateDnsName": "ip-10-152-134-243.ap-northeast-1.compute.internal", "SecurityGroups": [ { "GroupId": "sg-ad2556ac", "GroupName": "default" } ], "ClientToken": null, "InstanceType": "m1.small" } ], "Groups": [ { "GroupId": "sg-ad2556ac", "GroupName": "default" } ], "ReservationId": "r-f4fc3ff6", "OwnerId": "317282958305" } ] }
start-instances
EC2インスタンスを開始します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 start-instances --instance-ids i-8490db86
stop-instances
EC2インスタンスを停止します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 stop-instances --instance-ids i-8490db86
reboot-instances
EC2インスタンスを再起動します。インスタンスIDはスペース区切り("instance-id" "instance-id")の形で復数渡す事が可能です。
$ aws ec2 reboot-instances --instance-ids i-8490db86
terminate-instances
EC2インスタンスを終了/消去させます。
$ aws ec2 terminate-instances --instance-ids i-8490db86
bundle-instance
(ネタ的に長くなりそうなのでこのコマンドは別エントリにて後日対応したいと思います。)
import-instance
(ネタ的に長くなりそうなのでこのコマンドは別エントリにて後日対応したいと思います。)
EC2:モニター(monitor)に関する操作
monitor-instances
実行中のインスタンスのモニタリング機能を有効にします。
$ aws ec2 monitor-instances --instance-ids i-6a8ec568 { "InstanceMonitorings": [ { "InstanceId": "i-6a8ec568", "Monitoring": { "State": "pending" } } ], "ResponseMetadata": { "RequestId": "e35d2504-f223-4853-9750-05cd1333867a" } }
モニタリングに関しては以下の情報を参照。以下『Enabled Detailed Monitoring』ボタンを押下したのと同じアクションを実施する事になります。ちなみにこちらの詳細モニタリング、別途料金が発生致しますのでご注意。
Amazon CloudWatch (リソースとアプリケーションのモニタリング) | アマゾン ウェブ サービス(AWS 日本語)
unmonitor-instances
実行中のインスタンスのモニタリング機能を無効にします。上記操作を戻す形ですね。
$ aws ec2 unmonitor-instances --instance-ids i-6a8ec568 { "InstanceMonitorings": [ { "InstanceId": "i-6a8ec568", "Monitoring": { "State": "disabling" } } ], "ResponseMetadata": { "RequestId": "8875048b-c394-4fcd-931b-396e27781d0f" } }
EC2:インスタンスステータス(instance-status)に関する操作
describe-instance-status
EC2インスタンス情報のステータスを表示します。スケジュールされた2つの情報について知る事が出来ます。
- Rebootのスケジュール(system-reboot or instance-reboot)
- インスタンスのシャットダウン(instance-retirement)
$ aws ec2 describe-instance-status --instance-ids i-6a8ec568 [ { "InstanceId": "i-6a8ec568", "InstanceState": { "Code": 16, "Name": "running" }, "AvailabilityZone": "ap-northeast-1a", "SystemStatus": { "Status": "ok", "Details": [ { "Status": "passed", "Name": "reachability" } ] }, "InstanceStatus": { "Status": "ok", "Details": [ { "Status": "passed", "Name": "reachability" } ] } } ]
report-instance-status
インスタンスのレポートを出力するコマンド?ヘルプ見る限りだと特に説明記述は無い模様。
ヘルプを見つつ実行してみます。ステータスを指定するところで実行は出来ました(true)が、特に結果は帰って来ていないみたい。どういう使い方するのかしら?これはひとまず保留としたいと思います。
ec2-report-instance-status - Amazon Elastic Compute Cloud
EC2:インスタンス属性情報(instance-attribute)に関する操作
describe-instance-attribute
インスタンスの属性値(attribute)に関する情報を取得。1回での呼び出しでインスタンスIDと属性1つを指定する必要があります。指定出来るのは以下。
- instanceType
- kernel
- ramdisk
- userData
- disableApiTermination
- instanceInitiatedShutdownBehavior
- rootDeviceName
- blockDeviceMapping
実行してみましたが、今イチ結果がおかしい?instanceTypeだけが得られると思っていたら、ひと通り結果が返って来て居たり(結果内容は微妙い)。
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute instanceType{ "UserData": { "Value": "t1.micro" }, "ResponseMetadata": { "RequestId": "38704544-3dd8-4486-828c-0d17e18222bc" }, "ProductCodes": [], "InstanceId": "i-6a8ec568", "InstanceInitiatedShutdownBehavior": { "Value": "t1.micro" }, "RootDeviceName": { "Value": "t1.micro" }, "EbsOptimized": { "Value": false }, "BlockDeviceMappings": [], "KernelId": { "Value": "t1.micro" }, "RamdiskId": { "Value": "t1.micro" }, "DisableApiTermination": { "Value": false }, "InstanceType": { "Value": "t1.micro" } }
ひと通り返ってくる結果の中から所定の内容のみ抽出して使ってください、という事であれば、データとしては抽出出来てそうです。
$ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'instanceType' | jq '.InstanceType' { "Value": "t1.micro" } $ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'disableApiTermination' | jq '.DisableApiTermination' { "Value": false } $ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'instanceInitiatedShutdownBehavior' | jq '.InstanceInitiatedShutdownBehavior' { "Value": "terminate" } $ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'rootDeviceName' | jq '.RootDeviceName' { "Value": "/dev/sda1" } $ aws ec2 describe-instance-attribute --instance-id i-6a8ec568 --attribute 'userData' | jq '.UserData' { "Value": "IyEvYmluL2Jhc2ggLWV4CmVjaG8gJ2hlbGxvLCBlYzItd29ybGQhJw==" }
modify-instance-attribute
インスタンスの属性値を変更します。instance-idと共に以下の属性キー、値を指定して変更する模様。
aws ec2 modify-instance-attribute --instance-id <value> [--attribute <value>] [--value <value>] [--block-device-mappings <value>] [--source-dest-check <value>] [--disable-api-termination <value>] [--instance-type <value>] [--kernel <value>] [--ramdisk <value>] [--user-data <value>] [--instance-initiated-shutdown-behavior <value>] [--groups <value>] [--ebs-optimized <value>]
インスタンスタイプを変更してみます。元々t1.microでしたが...
コマンド実行で、
$ aws ec2 modify-instance-attribute --instance-id i-6a8ec568 --attribute instanceType --value m1.small { "return": "true", "ResponseMetadata": { "RequestId": "d554d17b-b84c-41fc-86a1-7ed1b905263a" } }
変更されました!
reset-instance-attribute
属性値情報のリセットを行います。しかしこのコマンド、現状ではkernel , ramdiskの2つしか対応していない模様です。
$ aws ec2 reset-instance-attribute --instance-id i-6a8ec568 --attribute kernel { "return": "true", "ResponseMetadata": { "RequestId": "fdfbe429-1a73-4712-a7a8-157fed59a5a6" } }